#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
// 从键盘读取数据，写⼊管道，读取管道，写到屏幕

int main()
{
    int fds[2];
    char buf[100];
    int len;
    if (pipe(fds) == -1)
        perror("make pipe"), exit(1);
    // read from stdin
    while (fgets(buf, 100, stdin))
    {
        len = strlen(buf);
        // write into pipe
        if (write(fds[1], buf, len) != len)
        {
            perror("write to pipe");
            break;
        }
        // 成功时：返回实际写入的字节数。
        // 失败时：返回-1，并将错误代码存入errno中。返回值为0表示没有写入任何数据，通常发生在count为0的情况下。
        memset(buf, 0x00, sizeof(buf));
        if ((len = read(fds[0], buf, 100)) == -1)
        {
            perror("read from pipe");
            break;
        }
        // write to stdout
        if (write(1, buf, len) != len)
        {
            perror("write to stdout");
            break;
        }
    }
    return 0;
}